#!encoding=utf-8
# 数据库升级
# 可以将任意版本数据库转换至v2数据库
# 使用方法：将此文件放在主程序目录下运行，按提示操作
import sqlite3
import config
import shutil
import os
import re

def UpdateDb():
    conn = sqlite3.connect(config.DATABASE_NAME)
    cur = conn.cursor()
    print('检查数据库版本') 
    cur.execute('SELECT version FROM CONFIG')
    if(cur.fetchall()[0][0] <> 1):
        print('本地数据库版本于期望版本不符，数据库升级失败')
        return False
     
    print('正在备份数据库')
    shutil.copyfile(config.DATABASE_NAME, 'pictures.db.bk')
    print('正在升级数据库')
    cur.execute('SELECT * FROM Pictures')
    res = cur.fetchall()
    cur.execute('UPDATE CONFIG SET VERSION = 2 WHERE VERSION = 1')
    conn.execute('CREATE TABLE temp(FileID VARCHAR(64) PRIMARY KEY, ArtistID INTEGER, FileNameID INTEGER)')
    for row in res:
        sql = 'INSERT INTO temp(FileID, ArtistID, FileNameID) VALUES("%s", %s, %s)' % (row[0], row[1], re.findall(r'\d+', row[2])[0])
        cur.execute(sql)
    conn.execute('DROP TABLE Pictures')
    conn.execute('ALTER TABLE temp RENAME TO Pictures')
    conn.commit()
    return True

def main():
    print('程序升级')
    os.chdir(config.WORKSPACE_FOLDER)
    print('本程序将SePiCer数据库升级至v2')
    print('要求:本地数据库版本为v1，将程序升级至对应版本')
    answer = raw_input('是否要继续升级？(y/n): ')
    if(not answer == 'y'):
        return
    if not UpdateDb():
        print('数据库升级失败，升级过程退出')
        return False

    print('升级成功，请尽快将主程序升级至最新版本')

if __name__ == '__main__':
    print('fuck!')
    main()